/**
 * 管理员API接口
 * 创建时间：2025-09-16
 * 作者：开发团队
 * 目的：封装管理员模块的API调用
 */

import { httpRequest } from '@/utils/request'
import type {
  StatisticsData,
  StatisticsParams,
  Key,
  SpecialVisitor,
  SpecialVisitorRequest,
  SpecialVisitorParams,
  Guard,
  GuardRequest,
  GuardParams,
  AuditLog,
  AuditLogParams
} from '@/types/admin'
import type { ApiResponse, PaginationResponse } from '@/types/common'
import type { Campus } from '@/types/superadmin'

export const adminApi = {
  /**
   * 获取统计数据
   * @param params 统计参数
   * @returns 统计数据
   */
  getStatistics(params: StatisticsParams): Promise<StatisticsData> {
    return httpRequest.get<StatisticsData>('/admin/statistics', { params });
  },

  /**
   * 获取院区列表
   * @param params 查询参数
   * @returns 院区列表
   */
  getCampuses(params: { page?: number, size?: number }): Promise<PaginationResponse<Campus>> {
    return httpRequest.get<PaginationResponse<Campus>>('/admin/campuses', { params });
  },

  /**
   * 导出统计报告
   * @param params 导出参数
   * @returns 导出结果
   */
  exportStatisticsReport(params: StatisticsParams & { format: string }): Promise<ApiResponse<{ download_url: string, filename: string }>> {
    return httpRequest.post<ApiResponse<{ download_url: string, filename: string }>>('/admin/statistics/export', params)
  },

  /**
   * 获取密钥列表
   * @param params 分页参数
   * @returns 密钥列表
   */
  getKeys(params: { skip?: number, limit?: number }): Promise<ApiResponse<Key[]>> {
    return httpRequest.get<ApiResponse<Key[]>>('/admin/keys', { params })
  },

  /**
   * 生成新密钥
   * @param data 密钥数据
   * @returns 新密钥
   */
  createKey(data: { created_by: number, expired_at?: string }): Promise<ApiResponse<Key>> {
    return httpRequest.post<ApiResponse<Key>>('/admin/keys', data)
  },

  /**
   * 归档密钥
   * @param keyId 密钥ID
   * @returns 更新后的密钥
   */
  archiveKey(keyId: number): Promise<ApiResponse<Key>> {
    return httpRequest.put<ApiResponse<Key>>(`/admin/keys/${keyId}/archive`)
  },

  /**
   * 激活密钥
   * @param keyId 密钥ID
   * @returns 更新后的密钥
   */
  activateKey(keyId: number): Promise<ApiResponse<Key>> {
    return httpRequest.put<ApiResponse<Key>>(`/admin/keys/${keyId}/activate`)
  },

  /**
   * 删除密钥
   * @param keyId 密钥ID
   * @returns 删除结果
   */
  deleteKey(keyId: number): Promise<ApiResponse<void>> {
    return httpRequest.delete<ApiResponse<void>>(`/admin/keys/${keyId}`)
  },

  /**
   * 获取特殊访客列表
   * @param params 查询参数
   * @returns 特殊访客列表
   */
  getSpecialVisitors(params: SpecialVisitorParams): Promise<PaginationResponse<SpecialVisitor>> {
    return httpRequest.get<PaginationResponse<SpecialVisitor>>('/admin/special-visitors', { params })
  },

  /**
   * 添加特殊访客
   * @param data 特殊访客数据
   * @returns 创建结果
   */
  createSpecialVisitor(data: SpecialVisitorRequest): Promise<ApiResponse<{ id: number }>> {
    return httpRequest.post<ApiResponse<{ id: number }>>('/admin/special-visitors', data)
  },

  /**
   * 更新特殊访客
   * @param id 特殊访客ID
   * @param data 特殊访客数据
   * @returns 更新结果
   */
  updateSpecialVisitor(id: number, data: SpecialVisitorRequest): Promise<ApiResponse<SpecialVisitor>> {
    return httpRequest.put<ApiResponse<SpecialVisitor>>(`/admin/special-visitors/${id}`, data)
  },

  /**
   * 删除特殊访客
   * @param id 特殊访客ID
   * @returns 删除结果
   */
  deleteSpecialVisitor(id: number): Promise<ApiResponse<void>> {
    return httpRequest.delete<ApiResponse<void>>(`/admin/special-visitors/${id}`)
  },

  /**
   * 获取门卫列表
   * @param params 查询参数
   * @returns 门卫列表
   */
  getGuards(params: GuardParams): Promise<PaginationResponse<Guard>> {
    return httpRequest.get<PaginationResponse<Guard>>('/admin/guards', { params })
  },

  /**
   * 添加门卫账号
   * @param data 门卫数据
   * @returns 创建结果
   */
  createGuard(data: GuardRequest): Promise<Guard> {
    return httpRequest.post<Guard>('/admin/guards', data)
  },

  /**
   * 更新门卫信息
   * @param id 门卫ID
   * @param data 门卫数据
   * @returns 更新结果
   */
  updateGuard(id: number, data: GuardRequest): Promise<Guard> {
    return httpRequest.put<Guard>(`/admin/guards/${id}`, data)
  },

  /**
   * 删除门卫
   * @param id 门卫ID
   * @returns 删除结果
   */
  deleteGuard(id: number): Promise<void> {
    return httpRequest.delete<void>(`/admin/guards/${id}`)
  },

  /**
   * 修改门卫密码
   * @param id 门卫ID
   * @param newPassword 新密码
   * @returns 修改结果
   */
  changeGuardPassword(id: number, newPassword: string): Promise<ApiResponse<void>> {
    return httpRequest.put<ApiResponse<void>>(`/admin/guards/${id}/password`, { new_password: newPassword })
  },

  /**
   * 获取审计日志列表
   * @param params 查询参数
   * @returns 审计日志列表
   */
  getAuditLogs(params: AuditLogParams): Promise<PaginationResponse<AuditLog>> {
    return httpRequest.get<PaginationResponse<AuditLog>>('/admin/audit-logs', { params })
  },

  /**
   * 获取审计日志总数
   * @param params 查询参数
   * @returns 审计日志总数
   */
  getAuditLogsCount(params: AuditLogParams): Promise<ApiResponse<{ count: number }>> {
    return httpRequest.get<ApiResponse<{ count: number }>>('/admin/audit-logs/count', { params })
  }
}